<?php
namespace Crud\Create;

use Pinenut\Form;

abstract class FormAction extends \Forms\FormAction {
	protected static $isPublic = true;
	
	protected static $_crudConfigClass = 'CrudConfig';
	protected static $layout = "#layouts.modal";

	// тут мы говорим какую вызывать вьюху.
	protected static $defaultViews = ['#crud.create.form'];

	protected function getFormConfig()
	{
		// FIXME: это какой-то ёбаный стыд - перестаёт работать позднее статическое связывание
		/// после того как я файнд делаюю ниже, поэтому загрузку конфы выношу сюда
		$class = static::$_crudConfigClass;
		$formConfig = $class::getCreateForm();

		return $formConfig;
	}

	protected function getFormAction()
	{
		return $this->url($this->request->action);
	}

	protected function onFormProcess()
	{
		// уже проверили что всё ок
		$data = $this->form->getValues();

		$class = static::$_crudConfigClass;
		$modelName = $class::get('model');

		/** @var \Model $model */
		$model = new $modelName();
		$model->populate($data, false);
		$model->save();

		$this->form->flush();
		$this->response->noRender(true);
	}

	protected function onGetRequest()
	{
		$this->response->form = $this->form;

		$class = static::$_crudConfigClass;
		$this->response->name = $class::get('entityName');
	}

	protected function onEndRun()
	{
		$this->response->form = $this->form;

		$class = static::$_crudConfigClass;
		$this->response->name = $class::get('entityName');
	}


	/*protected function run()
	{
	
		// отрубаем кеширование если пост-запрос
		if ($this->request->_isPost) {
			$this->response->noCache(true);
		}
		
		// FIXME: это какой-то ёбаный стыд - перестаёт работать позднее статическое связывание
		/// после того как я файнд делаюю ниже, поэтому загрузку конфы выношу сюда
		$class = static::$_crudConfigClass;
		$formConfig = $class::getCreateForm();

		$formConfig['htmlOptions']['action'] = $this->url($this->request->action);
		
		$form = new Form ( $this->request->_identity, $this->request->action, $formConfig);
		if ($this->request->_isPost && $this->request->isPartial) {
			$form->process($this->request->params(), true);
			$this->response->content =  $form->render();
			$this->response->noRender(true);
			return;

		} else if ($this->request->_isPost) {
			if (!$form->process($this->request->params())) {
				$this->response->form = $form;
				return;
			}
			// уже проверили что всё ок
			$data = $form->getValues();
			
			$modelName = $class::get('model');
				
			$model = new $modelName();
			$model->populate($data, false);
			$model->save();
			
			$form->flush();
			$this->response->noRender(true);
			
		}
		
		$this->response->form = $form;
		$this->response->name = $class::get('entityName');
		
	}*/
}